//package com.wat.utils;
//
//import javax.activation.DataHandler;
//import javax.activation.DataSource;
//import javax.activation.FileDataSource;
//import javax.mail.*;
//import javax.mail.internet.*;
//import java.io.UnsupportedEncodingException;
//import java.util.*;
//
///**
// * multipart 的集中混合类型：
// * multipart/mixed：附件。
// * multipart/related：内嵌资源。
// * multipart/alternative：纯文本与超文本共存。
// */
//public class EmailUtils {
//
//	private static String smtpHost = "smtp.qq.com";
//	private static String smtpPort = "587";
//	private static String smtpAuth = "true";
//	private static String from = "lifutao.work@foxmail.com";
//	private static String fromName = "lifutao";
//	private static String userName = "lifutao.work@foxmail.com";
//	private static String password = "dbamxjztkqgkbjcg";
//
//	public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
//
//		List<String> sendTo = new ArrayList<>();
//		sendTo.add("lifutao8888@icloud.com");
//
//		List<Map> images = new ArrayList<>();
//		Map<String, String> image1 = new HashMap<>();
//		image1.put("name", "image1.png");
//		image1.put("url", "/Users/wat/110013100650_18821405.png");
//		images.add(image1);
//
//		Map<String, String> image2 = new HashMap<>();
//		image2.put("name", "image2.png");
//		image2.put("url", "/Users/wat/image.png");
//		images.add(image2);
//
//		List<String> fileNames = new ArrayList<>();
//		fileNames.add("/Users/wat/Downloads/110000000050_12365474.ofd");
//		fileNames.add("/Users/wat/110013100650_18821405.png");
//
//		Email email = new Email("邮件标题", "邮件正文", smtpHost, smtpPort, smtpAuth, from, fromName, userName, password, sendTo, null, null, images, fileNames,null,null);
//		String result = EmailUtils.sendEmail(email);
//		System.out.println(result);
//
//	}
//
//	public static String sendEmail(Email email) throws MessagingException, UnsupportedEncodingException {
//
//		Properties properties = new Properties();
//		properties.put("mail.smtp.host", email.getSmtp());// 设置smtp主机
//		properties.put("mail.smtp.auth", email.getAuth());// 使用smtp身份验证
//		properties.put("mail.smtp.port", email.getPort());
//
//		/**
//		 * 在 JavaMail 中，可以通过 extends Authenticator 抽象类，在子类中覆盖父类中的
//		 * getPasswordAuthentication() 方法，就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail
//		 * 中的这种设计是使用了策略模式（Strategy
//		 */
//		MimeMessage message = new MimeMessage(Session.getInstance(properties,
//				new Authenticator() {
//					public PasswordAuthentication getPasswordAuthentication() {
//						return new PasswordAuthentication(email.getServername(), email.getServerpasswd()); //设置发送帐号密码
//					}
//				}));
//
//		// 设置邮件的发件人以及发件人昵称
//		message.setFrom(new InternetAddress(MimeUtility.encodeText(email.getNickname()) + " <" + email.getFrom() + ">"));
//
//		// 设置邮件的收件人
//		InternetAddress[] sendTo = new InternetAddress[email.getSendTo().size()];
//		for (int j = 0; j < email.getSendTo().size(); j++) {
//			sendTo[j] = new InternetAddress(email.getSendTo().get(j));
//		}
//		message.setRecipients(Message.RecipientType.TO, sendTo);
//
//		// 设置邮件抄送人
//		if (email.getSendCC() != null && email.getSendCC().size() > 0) {
//			InternetAddress[] sendCC = new InternetAddress[email.getSendCC().size()];
//			for (int j = 0; j < email.getSendCC().size(); j++) {
//				sendCC[j] = new InternetAddress(email.getSendCC().get(j));
//			}
//			message.setRecipients(Message.RecipientType.CC, sendCC);
//		}
//
//		// 设置邮件表示暗抄送人
//		if (email.getSendBCC() != null && email.getSendBCC().size() > 0) {
//			InternetAddress[] sendBCC = new InternetAddress[email.getSendBCC().size()];
//			for (int j = 0; j < email.getSendBCC().size(); j++) {
//				sendBCC[j] = new InternetAddress(email.getSendBCC().get(j));
//			}
//			message.setRecipients(Message.RecipientType.BCC, sendBCC);
//		}
//
//		// 设置邮件标题
//		message.setSubject(email.getTitle());
//
//
//		/**
//		 * 创建邮件的主体：
//		 * 邮件主体为 mm_0，mm_0 的混合模式为 mixed，mm_0 包含图文部分和附件部。
//		 * 图文部分：为 mbp_1，mbp_1 则又嵌套一个 mm_2，mm_2 混合模式为 related，
//		 * mm_2 则又嵌套了多个 mbp_3，mbp_3 可以是文字或图片。
//		 * 附件部分：为 mbp_attch，可以直接嵌套至邮件主体为 mm_0中。
//		 */
//		MimeMultipart mm_0 = new MimeMultipart("mixed");
//		MimeBodyPart mbp_1 = new MimeBodyPart();
//		MimeMultipart mm_2 = new MimeMultipart("related");
//
//		// 设置邮件主体的图文部分
//		String textStr = email.getText() + "<br/>";
//		if (email.getImages() != null && email.getImages().size() > 0) {
//			for (Map map : email.getImages()) {
//				// 创建图片
//				MimeBodyPart mbp_3 = new MimeBodyPart();
//				DataSource ds = new FileDataSource(map.get("url").toString());
//				mbp_3.setDataHandler(new DataHandler(ds));
//				mbp_3.setContentID(map.get("name").toString());
//				textStr += "image：<img src='cid:" + map.get("name").toString() + "'>";
//				mm_2.addBodyPart(mbp_3);
//			}
//		}
//		MimeBodyPart mbp_3 = new MimeBodyPart();
//		mbp_3.setContent(textStr, "text/html;charset=gb2312");
//		mm_2.addBodyPart(mbp_3);
//		mbp_1.setContent(mm_2);
//		mm_0.addBodyPart(mbp_1);
//
//		// 设置邮件主体的附件部分
//		if (email.getFileNames() != null && email.getFileNames().size() > 0) {
//			for (String fileName : email.getFileNames()) {
//				// 创建 MimeBodyPart
//				MimeBodyPart mbp_attch = new MimeBodyPart();
//				DataSource ds = new FileDataSource(fileName);
//				mbp_attch.setDataHandler(new DataHandler(ds));
//				mbp_attch.setFileName(MimeUtility.encodeText(ds.getName()));
//				mm_0.addBodyPart(mbp_attch);
//			}
//		}
//
//		message.setContent(mm_0);
//		message.saveChanges(); // 保存修改
//		System.out.println("邮件发送中...");
//		Transport.send(message);// 发送邮件
//		return "发送成功";
//	}
//
//	static class Email {
//		private String title = ""; //邮件标题
//		private String text = ""; //邮件内容，支持html格式邮件标题
//		private String smtp = ""; // 设置发送邮件所用到的smtp
//		private String port = "80"; // 设置发送邮件所用到的端口
//		private String auth = "true"; // 设置发送邮件所用到的smtp
//		private String from = ""; //发件人
//		private String nickname = ""; //发件人昵称
//		private String servername = ""; //发送人账号
//		private String serverpasswd = ""; //发送人密码
//		private List<String> sendTo = null; //收件人账号
//		private List<String> sendCC = null; //抄送人账号
//		private List<String> sendBCC = null; //暗送人账号
//		private List<Map> images = null; //邮件中图片以及别名，图片在正文中引用格式<img src='cid:别名1'><img src='cid:别名2'>
//		private List<String> fileNames = null; //附件
//		private List<String> originUrls = null; //原始文件url 已解码
//		private List<String> originImageUrls = new ArrayList<>(); //原始文件图片url
//
//		public Email() {
//			super();
//		}
//
//
//		public Email(String title, String text, String smtp, String port, String auth, String from, String nickname, String servername, String serverpasswd, List<String> sendTo, List<String> sendCC, List<String> sendBCC, List<Map> images, List<String> fileNames, List<String> originUrls, List<String> originImageUrls) {
//			this.title = title;
//			this.text = text;
//			this.smtp = smtp;
//			this.port = port;
//			this.auth = auth;
//			this.from = from;
//			this.nickname = nickname;
//			this.servername = servername;
//			this.serverpasswd = serverpasswd;
//			this.sendTo = sendTo;
//			this.sendCC = sendCC;
//			this.sendBCC = sendBCC;
//			this.images = images;
//			this.fileNames = fileNames;
//			this.originUrls = originUrls;
//			this.originImageUrls = originImageUrls;
//		}
//
//		public String getPort() {
//			return port;
//		}
//
//		public void setPort(String port) {
//			this.port = port;
//		}
//
//		public String getAuth() {
//			return auth;
//		}
//
//		public void setAuth(String auth) {
//			this.auth = auth;
//		}
//
//		public String getNickname() {
//			return nickname;
//		}
//
//		public void setNickname(String nickname) {
//			this.nickname = nickname;
//		}
//
//		public String getTitle() {
//			return title;
//		}
//
//
//		public void setTitle(String title) {
//			this.title = title;
//		}
//
//
//		public String getText() {
//			return text;
//		}
//
//
//		public void setText(String text) {
//			this.text = text;
//		}
//
//
//		public String getSmtp() {
//			return smtp;
//		}
//
//
//		public void setSmtp(String smtp) {
//			this.smtp = smtp;
//		}
//
//
//		public String getFrom() {
//			return from;
//		}
//
//
//		public void setFrom(String from) {
//			this.from = from;
//		}
//
//
//		public String getServername() {
//			return servername;
//		}
//
//
//		public void setServername(String servername) {
//			this.servername = servername;
//		}
//
//
//		public String getServerpasswd() {
//			return serverpasswd;
//		}
//
//
//		public void setServerpasswd(String serverpasswd) {
//			this.serverpasswd = serverpasswd;
//		}
//
//
//		public List<String> getSendTo() {
//			return sendTo;
//		}
//
//
//		public void setSendTo(List<String> sendTo) {
//			this.sendTo = sendTo;
//		}
//
//
//		public List<String> getSendCC() {
//			return sendCC;
//		}
//
//
//		public void setSendCC(List<String> sendCC) {
//			this.sendCC = sendCC;
//		}
//
//
//		public List<String> getSendBCC() {
//			return sendBCC;
//		}
//
//
//		public void setSendBCC(List<String> sendBCC) {
//			this.sendBCC = sendBCC;
//		}
//
//
//		public List<Map> getImages() {
//			return images;
//		}
//
//
//		public void setImages(List<Map> images) {
//			this.images = images;
//		}
//
//
//		public List<String> getFileNames() {
//			return fileNames;
//		}
//
//
//		public void setFileNames(List<String> fileNames) {
//			this.fileNames = fileNames;
//		}
//
//
//		public List<String> getOriginUrls() {
//			return originUrls;
//		}
//
//		public void setOriginUrls(List<String> originUrls) {
//			this.originUrls = originUrls;
//		}
//
//		public List<String> getOriginImageUrls() {
//			return originImageUrls;
//		}
//
//		public void setOriginImageUrls(List<String> originImageUrls) {
//			this.originImageUrls = originImageUrls;
//		}
//	}
//
//}
